OUT:=main
SRCS:=$(wildcard *.cpp)
OBJS:=$(patsubst %.cpp,%.o,$(SRCS))
MANY_OUT:=$(patsubst %.cpp,%,$(SRCS))
COM_OP:= -g -Wall
CC:=g++
RM:=rm

#主目标:通过.o文件链接
$(OUT):$(OBJS)
	$(CC) $^ -o $@ $(COM_OP)

#从.cpp生成.o
%.o:%.cpp
	$(CC) -c $^ -o $@ $(COM_OP)

#直接从.cpp生成可执行文件(为all服务)	
%:%.cpp
	$(CC) $< -o $@ $(COM_OP)

#伪目标声明
.PHONY:all clean allclean rebuild allbuild

#构建所有可执行文件
all:$(MANY_OUT)

#清理main和.o文件
clean:
	$(RM) $(OUT) $(OBJS)

#清理全部main
cleanall:
	$(RM) $(MANY_OUT) 

#单一清理和重建
rebuild:clean $(OUT)

#全部清理和重建
allrebuild:cleanall all
